package com.arch.dev.server.pdf;
import java.io.File;

import java.io.FileOutputStream;

import java.util.ArrayList;

import java.util.Date;


import com.arch.dev.client.vo.BudgetVO;
import com.itextpdf.text.Anchor;

import com.itextpdf.text.BadElementException;

import com.itextpdf.text.BaseColor;

import com.itextpdf.text.Chapter;

import com.itextpdf.text.Document;

import com.itextpdf.text.DocumentException;

import com.itextpdf.text.Element;

import com.itextpdf.text.Font;

import com.itextpdf.text.List;

import com.itextpdf.text.ListItem;

import com.itextpdf.text.Paragraph;

import com.itextpdf.text.Phrase;

import com.itextpdf.text.Section;

import com.itextpdf.text.pdf.PdfPCell;

import com.itextpdf.text.pdf.PdfPTable;

import com.itextpdf.text.pdf.PdfWriter;

 

 

public class FirstPdf1 {

               private static String FILE = "d:/FirstPdf.pdf";

               private static Font catFont = new Font(Font.FontFamily.TIMES_ROMAN, 18,

                                             Font.BOLD);

               private static Font redFont = new Font(Font.FontFamily.TIMES_ROMAN, 12,

                                             Font.NORMAL, BaseColor.RED);

               private static Font subFont = new Font(Font.FontFamily.TIMES_ROMAN, 16,

                                             Font.BOLD);

               private static Font smallBold = new Font(Font.FontFamily.TIMES_ROMAN, 12,

                                             Font.BOLD);

              

               private ArrayList<BudgetVO> budgetVOs;

 

               public static void main(String[] args) {

                              try {

                                             Document document = new Document();

                                             PdfWriter.getInstance(document, new FileOutputStream(FILE));

                                             document.open();

                                             addMetaData(document);

                                             addTitlePage(document);

                              //            addContent(document);

                                             document.close();

                              } catch (Exception e) {

                                             e.printStackTrace();

                              }

               }

 

               public void generatePDF(File file, ArrayList<BudgetVO> budgetVOs){

                              this.budgetVOs = budgetVOs;

                              try {

                                             Document document = new Document();

                                             PdfWriter.getInstance(document, new FileOutputStream(file));

                                             document.open();

                                             addMetaData(document);

                                             addTitlePage(document);

                                             addContent(document);

                                             document.close();

                              } catch (Exception e) {

                                             e.printStackTrace();

                              }

               }

              

               // iText allows to add metadata to the PDF which can be viewed in your Adobe

               // Reader

               // under File -> Properties

               private static void addMetaData(Document document) {

                              document.addTitle("My first PDF");

                              document.addSubject("Using iText");

                              document.addKeywords("Java, PDF, iText");

                              document.addAuthor("Lars Vogel");

                              document.addCreator("Lars Vogel");

               }

 

               private static void addTitlePage(Document document)

                                             throws DocumentException {

                              Paragraph preface = new Paragraph();

                              // We add one empty line

                              addEmptyLine(preface, 1);

                              // Lets write a big header

                              preface.add(new Paragraph("Title of the document", catFont));

 

                              addEmptyLine(preface, 1);

                              // Will create: Report generated by: _name, _date

                              preface.add(new Paragraph(

                                                            "Report generated by: " + System.getProperty("user.name") + ", " + new Date(), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

                                                            smallBold));

                              addEmptyLine(preface, 3);

                              preface.add(new Paragraph(

                                                            "This document describes something which is very important ",

                                                            smallBold));

 

                              addEmptyLine(preface, 8);

 

                              preface.add(new Paragraph(

                                                            "This document is a preliminary version and not subject to your license agreement or any other agreement with vogella.de ;-).",

                                                            redFont));

 

                              document.add(preface);

                              // Start a new page

                              document.newPage();

               }

 

               private  void addContent(Document document) throws DocumentException {

                              Anchor anchor = new Anchor("First Chapter", catFont);

                              anchor.setName("First Chapter");

 

                              // Second parameter is the number of the chapter

                              Chapter catPart = new Chapter(new Paragraph(anchor), 1);

 

                              Paragraph subPara = new Paragraph("Subcategory 1", subFont);

                              Section subCatPart = catPart.addSection(subPara);

                              subCatPart.add(new Paragraph("Hello"));

 

                              subPara = new Paragraph("Subcategory 2", subFont);

                              subCatPart = catPart.addSection(subPara);

                              subCatPart.add(new Paragraph("Paragraph 1"));

                              subCatPart.add(new Paragraph("Paragraph 2"));

                              subCatPart.add(new Paragraph("Paragraph 3"));

 

                              // Add a list

                              createList(subCatPart);

                              Paragraph paragraph = new Paragraph();

                              addEmptyLine(paragraph, 5);

                              subCatPart.add(paragraph);

 

                              // Add a table

                              createTable(subCatPart);

 

                              // Now add all this to the document

                              document.add(catPart);

 

                              // Next section

                              anchor = new Anchor("Second Chapter", catFont);

                              anchor.setName("Second Chapter");

 

                              // Second parameter is the number of the chapter

                              catPart = new Chapter(new Paragraph(anchor), 1);

 

                              subPara = new Paragraph("Subcategory", subFont);

                              subCatPart = catPart.addSection(subPara);

                              subCatPart.add(new Paragraph("This is a very important message"));

 

                              // Now add all this to the document

                              document.add(catPart);

 

               }

 

               private  void createTable(Section subCatPart)

                                             throws BadElementException {

                              PdfPTable table = new PdfPTable(4);

 

                              // t.setBorderColor(BaseColor.GRAY);

                              // t.setPadding(4);

                              // t.setSpacing(4);

                              // t.setBorderWidth(1);

 

                              PdfPCell c1 = new PdfPCell(new Phrase("Description"));

                              c1.setHorizontalAlignment(Element.ALIGN_CENTER);

                              table.addCell(c1);

 

                              c1 = new PdfPCell(new Phrase("Catagory"));

                              c1.setHorizontalAlignment(Element.ALIGN_CENTER);

                              table.addCell(c1);

 

                              c1 = new PdfPCell(new Phrase("Cost"));

                              c1.setHorizontalAlignment(Element.ALIGN_CENTER);

                              table.addCell(c1);

                             

                              c1 = new PdfPCell(new Phrase("Date"));

                              c1.setHorizontalAlignment(Element.ALIGN_CENTER);

                              table.addCell(c1);

                             

                              table.setHeaderRows(1);

 

                              for (BudgetVO budgetVO :budgetVOs) {

                                             table.addCell(budgetVO.getTitle());

                                             table.addCell(budgetVO.getCatagoryVO().getName());

                                             table.addCell(budgetVO.getCost().toString());

                                             table.addCell(budgetVO.getDate().toString());

                              }

                             

                                            

                              subCatPart.add(table);

 

               }

 

               private static void createList(Section subCatPart) {

                              List list = new List(true, false, 10);

                              list.add(new ListItem("First point"));

                              list.add(new ListItem("Second point"));

                              list.add(new ListItem("Third point"));

                              subCatPart.add(list);

               }

 

               private static void addEmptyLine(Paragraph paragraph, int number) {

                              for (int i = 0; i < number; i++) {

                                             paragraph.add(new Paragraph(" "));

                              }

               }

}